package Controle;

import Modelo.Vaga;
import Servico.VagaService;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.model.ListDataModel;
import util.FabricaDeObjetos;

public class VagaMB {

    private static VagaService vagaService;

    static {
        try {
            vagaService = (VagaService) FabricaDeObjetos.getObjetoUnico(VagaService.class);
        } catch (Exception e) {
            Logger.getLogger(VagaService.class.getName()).log(Level.SEVERE, null, e);
        }
    }

    private Vaga vagaCorrente;

    private Vaga vagaConsulta = new Vaga();

    private List<Vaga> resultadoConsulta;

    private ListDataModel listDataModel;

    public void incluir() {

        try {

            if (!vagaService.vagaCadastrada(vagaCorrente)) {

                vagaService.validaInformacoesVaga(vagaCorrente);

                vagaService.incluirVaga(vagaCorrente);

                addFacesMessage("Vaga " + vagaCorrente.getCodigo() + " incluido com sucesso!");

            } else {

                addFacesMessage("Não foi possivel incluir a Vaga " + vagaCorrente.getCodigo() + " pois a mesmo já foi cadastrada!");
            }

        } catch (Exception e) {
            addFacesMessage(e.getMessage());
        }
    }

    public String prepararInclusao() {
        
        vagaCorrente = new Vaga();
        
        return "INCLUIR";
    }

    public String voltarInclusao() {
        return "VOLTAR_INCLUSAO";
    }

    public String voltarConsulta() {
        return "VOLTAR_CONSULTA";
    }

    public String consultar() {

        try {

            if (resultadoConsulta == null) {
                resultadoConsulta = new ArrayList<Vaga>();
            }

            resultadoConsulta =  vagaService.consultar(vagaConsulta);

            listDataModel = new ListDataModel(resultadoConsulta);

            return "CONSULTAR";

        } catch (Exception e) {
            addFacesMessage(e.getMessage());
        }

        return null;
        
    }

    public String preparaEdicao() {

        vagaCorrente = (Vaga) listDataModel.getRowData();

        return "EDITAR";
    }

    public String voltarEdicao() {

        vagaCorrente = new Vaga();
        
        return "VOLTAR_EDICAO";
    }

    public void editar() {

        vagaService.editar(vagaCorrente);

        addFacesMessage("Usuario atualizado com sucesso!");
    }

    public String remover() {

        Vaga vagaRemover = (Vaga) listDataModel.getRowData();

        vagaService.remover(vagaRemover);

        resultadoConsulta.remove(vagaRemover);

        addFacesMessage("Vaga excluida com sucesso!");

        return "REMOVER";
    }

    public String limparCamposConsulta() {

        vagaConsulta = new Vaga();

        return "LIMPAR";
    }

    public void addFacesMessage(String message) {
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(message, null));
    }

    private boolean isBlank(String str) {
        return (str == null) || (str.trim().equals(""));
    }

    public Vaga getvagaCorrente() {
        return vagaCorrente;
    }

    public void setvagaCorrente(Vaga vagaCorrente) {
        this.vagaCorrente = vagaCorrente;
    }

    public ListDataModel getListDataModel() {
        return listDataModel;
    }

    public void setListDataModel(ListDataModel listDataModel) {
        this.listDataModel = listDataModel;
    }

    public List<Vaga> getResultadoConsulta() {
        return resultadoConsulta;
    }

    public void setResultadoConsulta(List<Vaga> resultadoConsulta) {
        this.resultadoConsulta = resultadoConsulta;
    }

    public VagaService getvagaService() {
        return vagaService;
    }

    public void setvagaService(VagaService vagaService) {
        this.vagaService = vagaService;
    }

    public Vaga getvagaConsulta() {
        return vagaConsulta;
    }

    public void setvagaConsulta(Vaga vagaConsulta) {
        this.vagaConsulta = vagaConsulta;
    }
}